package com.scvtc.service.system;

import com.baomidou.mybatisplus.extension.service.IService;
import com.scvtc.domain.ResResult;
import com.scvtc.domain.dto.common.SystemLoginUser;
import com.scvtc.domain.dto.common.SystemUserLoginDto;
import com.scvtc.domain.dto.system.user.UserInfoDto;
import com.scvtc.domain.dto.system.user.UserRoleDto;
import com.scvtc.domain.entity.system.SystemUser;
import com.scvtc.domain.vo.PageVo;
import com.scvtc.domain.vo.system.user.UserListVo;

import java.util.List;
import java.util.Map;

/**
 * 用户管理(SystemUser)表服务接口
 *
 * @author yiFei
 * @since 2022-04-13 17:38:29
 */
public interface SystemUserService extends IService<SystemUser> {
    /**
     * 实现用户登录
     *
     * @param systemUser
     * @return
     */
    ResResult<Map<String, Object>> login(SystemUserLoginDto systemUser);

    /**
     * 获取用户详情信息
     */
    ResResult<SystemLoginUser> userInfo();

    /**
     * 登出
     */
    ResResult<String> logout();

    /**
     * 查询所有用户
     *
     * @param current
     * @param size
     * @param userInfo
     * @return
     */
    ResResult<PageVo<List<UserListVo>>> getAllUser(Long current, Long size, UserInfoDto userInfo);

    /**
     * 增加用户
     *
     * @param userRoleDto
     * @return
     */
    ResResult<?> addUser(UserRoleDto userRoleDto);

    /**
     * 修改用户信息
     *
     * @param userInfoDto
     * @return
     */
    ResResult<?> updateUser(UserInfoDto userInfoDto);

    /**
     * 删除用户
     *
     * @param id
     * @return
     */
    ResResult<?> deleteUser(Long id);

    /**
     * 重置用户密码
     *
     * @param id
     * @return
     */
    ResResult<?> initUserPassword(Long id);

    /**
     * 强制下线
     *
     * @param id
     * @return
     */
    ResResult<?> offline(Long id);

    /**
     * 修改用户角色信息
     *
     * @param userId
     * @param roleIds
     * @return
     */
    ResResult<?> updateUserRoleIdsDto(Long userId, List<Long> roleIds);

    /**
     * 切换用户状态
     *
     * @param id
     * @param status
     * @return
     */
    ResResult<?> enableUser(Long id, String status);
}

